package com.mazaiting.generator.converter;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.mazaiting.generator.domain.entity.DatasourceEntity;
import com.mazaiting.generator.domain.form.DatasourceForm;
import com.mazaiting.generator.domain.vo.DatasourceVO;
import org.mapstruct.Mapper;
import org.mapstruct.MappingConstants;
import org.mapstruct.MappingTarget;
import org.mapstruct.ReportingPolicy;
import org.mapstruct.factory.Mappers;

/**
* 数据源管理
*
* @author mazaiting
* @datetime 2022-11-01 18:36:02
*/
@Mapper(componentModel = MappingConstants.ComponentModel.SPRING, unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface IDatasourceConverter {
    /**
     * 单例
     */
    IDatasourceConverter INSTANCE = Mappers.getMapper(IDatasourceConverter.class);

    /**
     * VO 转 实体
     * @param vo VO
     * @return 实体
     */
    DatasourceEntity vo2Entity(DatasourceVO vo);

    /**
     * 实体 转 VO
     * @param entity 实体
     * @return VO
     */
    DatasourceVO entity2VO(DatasourceEntity entity);

    /**
     * 表单转实体
     * @param form 表单
     * @param entity 实体
     */
    void form2Entity(DatasourceForm form, @MappingTarget DatasourceEntity entity);

    /**
     * 表单转实体
     * @param form 表单
     * @return 实体
     */
    DatasourceEntity form2Entity(DatasourceForm form);

    /**
     * 实体分页数据转 VO 分页数据
     * @param entityPage 实体分页
     * @return VO 分页
     */
    Page<DatasourceVO> entity2VO(Page<DatasourceEntity> entityPage);

}